package com.cskaoyan._19collection._06collection._02listdemo;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * @author Macro_Ray
 * @since 2024/4/3 10:14
 */
// List的遍历
/*
            List系列集合的五种遍历方法：
                1.迭代器
                2.列表迭代器
                3.增强for循环
                4.Lambda表达式
                5.普通for循环
*/
public class ListTraverse {
    @Test
    public void Iterator() {
        // 迭代器遍历

        // 创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        // 遍历
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }
    }

    @Test
    public void forIterator() {
        // 增强for循环

        // 创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        // 遍历
        for (String str : list) {
            System.out.println(str);
        }
    }

    @Test
    public void lambdaIterator() {
        // Lambda表达式 foreach
        // foreach方法的底层就是一个循环遍历，依次的到集合中的每一个元素
        // 并把每一个元素传递到下面的accept方法
        // accept方法的形参s依次表示集合中的每一个元素

        // 创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        // 遍历
        System.out.println("Lambda表达式遍历：");
        list.forEach(s -> System.out.println(s));
    }

    @Test
    public void foriItertoar(){
        // 普通for循环

        // 创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        // 遍历
        for (int i = 0; i < list.size(); i++) {
            String str = list.get(i);
            System.out.println(str);
        }
    }

    @Test
    public void listItertoar(){
        // 列表迭代器
        // 可以在遍历的时候添加元素

        // 创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");

        // 遍历
        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()){
            String next = lit.next();
            if ("bbb".equals(next)){
                lit.add("qqq");
            }
        }
        System.out.println(list);

    }
}
